/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI.Cadastro;

import Facade.Facade;
import GUI.tabelas.tabelaFornecedores;
import Objetos.Fornecedor;
import Objetos.Produto;
import Objetos.Usuario;
import Objetos.ValoresFixos;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.ParseException;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;

/**
 *
 * @author celio
 */
public final class CadastroProduto extends JPanel {

    JLabel marca, codBarraProduto,descricao, fornecedor, aliquota, unidade, valor, qtdItens, qtdTotal;
    public static JTextField tCodForn, tFornecedor, tMarca, tDescricao, tValor, tAliquota;
    JComboBox  tUnidade;
    JButton cadastrar, alterar, limpar, sair;
    String tipos[] = {"", "1 - Unidade", "2 - Fracionada"};
    JTable produtos;
    JScrollPane scroller;
    Calendar data;
    Produto produto;
    Facade fa;

    public CadastroProduto(final Usuario usu) {

        JLabel tela = new JLabel("... :::   Cadastro de Produtos   ::: ...");
        tela.setBounds(400, 10, 500, 20);
        add(tela);

        data = Calendar.getInstance();

        descricao = new JLabel("Descrição: ");
        tDescricao = new JTextField(10);

        valor = new JLabel("Valor (Sem R$): ");
        tValor = new JTextField(4);

        aliquota = new JLabel("Alíquota: ");
        tAliquota = new JTextField(5);

        unidade = new JLabel("Tipo Quantidade: ");
        tUnidade = new JComboBox(tipos);

        fornecedor = new JLabel("Fornecedor: ");
        tCodForn = new JTextField();
        tFornecedor = new JTextField();
        
        qtdItens = new JLabel("----------------------");
        qtdTotal = new JLabel("----------------------");

        cadastrar = new JButton("Cadastrar");
        alterar = new JButton("Alterar");
        limpar = new JButton("Limpar");
        sair = new JButton("Sair");
        
        codBarraProduto = new JLabel("");

        descricao.setBounds(10, 20, 180, 20);
        tDescricao.setBounds(120, 20, 200, 20);

        valor.setBounds(10, 50, 100, 20);
        tValor.setBounds(120, 50, 80, 20);

        fornecedor.setBounds(10, 80, 100, 20);
        tCodForn.setBounds(120, 80, 20, 20);
        tFornecedor.setBounds(150, 80, 180, 20);

        aliquota.setBounds(10, 110, 100, 20);
        tAliquota.setBounds(120, 110, 100, 20);

        unidade.setBounds(10, 140, 100, 20);
        tUnidade.setBounds(120, 140, 100, 20);
        
        qtdItens.setBounds(750, 450, 200, 20);
        qtdTotal.setBounds(900, 450, 200, 20);

        cadastrar.setBounds(20, 230, 100, 20);
        alterar.setBounds(350, 450, 100, 20);
        limpar.setBounds(120, 230, 100, 20);
        sair.setBounds(220, 230, 100, 20);
        
        codBarraProduto.setBounds(60, 300, 500, 100);

        add(descricao);
        add(tDescricao);

        add(valor);
        add(tValor);

        add(fornecedor);
        add(tCodForn);
        add(tFornecedor);

        add(aliquota);
        add(tAliquota);

        add(unidade);
        add(tUnidade);
        
        add(qtdItens);
        add(qtdTotal);

        add(cadastrar);
        add(alterar);
        add(limpar);
        add(sair);
        
        //add(codBarraProduto);
        
        codBarraProduto.setFont(new Font("EAN-13",Font.LAYOUT_LEFT_TO_RIGHT, 54));
        codBarraProduto.setBackground(Color.white);
        
        qtdItens.setForeground(Color.red);
        qtdTotal.setForeground(Color.red);
        
        alterar.setEnabled(false);
        tFornecedor.setEditable(false);
        atualizaTabela(usu);

        cadastrar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                produto = new Produto();
                fa = new Facade();

                produto.setDescProduto(tDescricao.getText());

                try {

                    produto.setValor(Funcoes.funcoes.formatoParaInserir(tValor.getText()));

                } catch (ParseException ex) {

                    JOptionPane.showMessageDialog(null, "Valor inválido inserido para o preço!");

                }
                produto.setFornecedor(tCodForn.getText());
                try {
                    produto.setAliquota(Funcoes.funcoes.formatoParaInserir(tAliquota.getText()));
                } catch (ParseException ex) {

                    JOptionPane.showMessageDialog(null, "Valor inválido inserido para a alíquota!");

                }
                produto.setData_inclusao(Funcoes.funcoes.paraInserirData(data.getTime().toLocaleString().substring(0, 10)));
                switch (tUnidade.getSelectedIndex()) {
                    case 0:

                        break;
                    case 1:
                        produto.setUnidade(ValoresFixos.TipoProduto.inteiro.getTipo());
                        break;
                    case 2:
                        produto.setUnidade(ValoresFixos.TipoProduto.fracionada.getTipo());

                }

                fa.adicionar_Produto(produto, usu);

                tDescricao.setText("");
                tCodForn.setText("");
                tFornecedor.setText("");
                tValor.setText("");
                tAliquota.setText("");
                tUnidade.setSelectedIndex(0);
                atualizaTabela(usu);

            }
        });
        
        produtos.addMouseListener(new MouseListener() {

            @Override
            public void mouseClicked(MouseEvent e) {
            
                fa = new Facade();
                Produto antes;
                antes = fa.procurar_Produto(produtos.getValueAt(produtos.getSelectedRow(), 0).toString(),usu);
                tDescricao.setText(antes.getDescProduto());
                tValor.setText(antes.getValor());
                tAliquota.setText(antes.getAliquota());
                alterar.setEnabled(true);
                cadastrar.setEnabled(false);
                
               
            }

            @Override
            public void mousePressed(MouseEvent e) {
           }

            @Override
            public void mouseReleased(MouseEvent e) {
             }

            @Override
            public void mouseEntered(MouseEvent e) {
              }

            @Override
            public void mouseExited(MouseEvent e) {
               }
        });

        alterar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                if(tCodForn.getText().equalsIgnoreCase("")||tUnidade.getSelectedIndex()==0){
                    
                    JOptionPane.showMessageDialog(null,"Preencha todos os campos!!!");
                    
                }else{
                fa = new Facade();
                Produto antes;
                antes = fa.procurar_Produto(produtos.getValueAt(produtos.getSelectedRow(), 0).toString(),usu);
                Produto depois = new Produto();
                depois.setDescProduto(tDescricao.getText());

                try {

                    depois.setValor(Funcoes.funcoes.formatoParaInserir(tValor.getText()));

                } catch (ParseException ex) {

                    JOptionPane.showMessageDialog(null, "Valor inválido inserido para o preço!");

                }
                depois.setFornecedor(tCodForn.getText());
                try {
                    depois.setAliquota(Funcoes.funcoes.formatoParaInserir(tAliquota.getText()));
                } catch (ParseException ex) {

                    JOptionPane.showMessageDialog(null, "Valor inválido inserido para a alíquota!");

                }
                depois.setData_inclusao(Funcoes.funcoes.paraInserirData(data.getTime().toLocaleString().substring(0, 10)));
                switch (tUnidade.getSelectedIndex()) {
                    case 0:

                        break;
                    case 1:
                        depois.setUnidade(ValoresFixos.TipoProduto.inteiro.getTipo());
                        break;
                    case 2:
                        depois.setUnidade(ValoresFixos.TipoProduto.fracionada.getTipo());

                }

                fa.alterar_Produto(antes, depois, usu);

                tDescricao.setText("");
                tCodForn.setText("");
                tFornecedor.setText("");
                tValor.setText("");
                tAliquota.setText("");
                tUnidade.setSelectedIndex(0);
                alterar.setEnabled(false);
                cadastrar.setEnabled(true);
                atualizaTabela(usu);
                }
            }
        });

        tCodForn.addKeyListener(new KeyListener() {

            @Override
            public void keyTyped(KeyEvent e) {
               // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }

            @Override
            public void keyPressed(KeyEvent e) {
            
                if(e.getKeyCode()==118){
                    
                    tabelaFornecedores tf = new tabelaFornecedores(usu);
                    
                }
                
            }

            @Override
            public void keyReleased(KeyEvent e) {
               // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
            }
        });
        
        tCodForn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
            
                fa = new Facade();
                try{
                Fornecedor forn = fa.procurar_Fornecedor(tCodForn.getText(), usu);
                tFornecedor.setText(forn.getNomeFornecedor());
                }catch(Exception ex){}
            }
        });
        
        limpar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                
                tDescricao.setText("");
                tCodForn.setText("");
                tFornecedor.setText("");
                tValor.setText("");
                tAliquota.setText("");
                tUnidade.setSelectedIndex(0);
                alterar.setEnabled(false);
                cadastrar.setEnabled(true);

               
               // codBarraProduto.setText(tDescricao.getText());
            }
        });

        sair.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                setVisible(false);
            }
        });

        setLayout(null);
        setBackground(Color.LIGHT_GRAY);
        setBorder(BorderFactory.createBevelBorder(1, Color.DARK_GRAY, Color.DARK_GRAY));
        setSize(800, 600);
        setVisible(true);
        revalidate();
        repaint();
    }

    public void atualizaTabela(Usuario usu) {

        try {
            remove(scroller);
            remove(produtos);
            repaint();
            revalidate();
            
        } catch (NullPointerException e) {
        }
        fa = new Facade();
        produtos = fa.consultaTodos_Produto(usu);
        produtos.setFont(new Font("Times New Roman", Font.BOLD, 14));
        scroller = new JScrollPane(produtos, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scroller.setBounds(350, 50, 720, 400);
        add(scroller);
        
        qtdItens.setText("Variedade de itens: "+produtos.getRowCount());
        try {
            qtdTotal.setText("Quantidade de itens: "+Funcoes.funcoes.calculaTotal(produtos, 5, "+").substring(2));
        } catch (ParseException ex) {
            Logger.getLogger(CadastroProduto.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

   

}
